# -*- coding:utf-8 -*-
# author: helili
# @Time: 2020/11/9 下午4:50

from UICaseRunner.common.operate_element import ElementOperate
from UICaseRunner.config import project_config
import time


class ValidateTestCase:
    def __init__(self, driver):
        self.element_operate = ElementOperate(driver)
        self.logger = project_config.logger

    def check_step(self, item, host):
        """
        列举出几种适应mj前端断言的方式：对比页面url、是否存在某个元素、元素的文本信息是否正确。
        后续可以加入 某元素是否可点击
        :param host: 当前测试环境的host
        :param item: 当前校验对象的内容
        """
        # 断言中的操作
        check_name = item.get("check_name")
        self.logger.info("==当前校验的是 %s " % check_name)

        expect_url = host + str(item.get("expect_url"))
        expect_text = str(item.get("expect_text"))

        # get_element返回的参数是一个dict，有定位元素的信息和元素定位信息
        try:
            if item["operate_type"] == '':
                # 断言类型为空是只需要判断元素是不是存在
                self.element_operate.get_element(item)
                self.logger.info("这个元素 %s 存在，断言成功" % item["check_name"])
                print("这个元素 %s 存在，断言成功" % item["check_name"])
            elif item["operate_type"] == "click":
                # 断言类型为空是只需要判断元素是不是存在
                self.element_operate.click(item)
                self.logger.info("这个元素 %s 操作成功" % item["check_name"])
                print("这个元素 %s 存在，断言成功" % item["check_name"])
            elif item["operate_type"] == "get_value":
                # 断言类型为获取文本并对比期望文本内容
                current_text = self.element_operate.get_text(item)
                time.sleep(0.5)
                assert current_text == expect_text
                self.logger.info("当前元素文本为 %s 与预期对比成功" % current_text)
                print("这个元素 %s 存在，断言成功" % item["check_name"])
            elif item["operate_type"] == "get_url":
                # 断言类型为 获取当前URL并对比期望url
                current_url = self.element_operate.get_url()
                assert current_url == expect_url, 'url 不相等'
                self.logger.info("当前浏览器路由 %s 与预期对比成功" % current_url)
                print(" %s 与预期对比成功" % item["check_name"])
            elif item["operate_type"] == "sleep":
                time.sleep(item.get("time"))
                self.logger.info("这步操作就是sleep %s 秒" % item["time"])
            elif item["operate_type"] == "switch_frame":
                self.element_operate.switch_to_iframe(item)
            elif item["operate_type"] == "switch_to_new_tab":
                self.element_operate.switch_to_new_tab()
            elif item["operate_type"] == "refresh":
                self.element_operate.refresh()

            # 断言类型为 二维码截图并识别内容，校验二维码内容是否包含预期内容
            elif item["operate_type"] == "extract_qr_code":
                url = self.element_operate.screenshot_element()
                print(url)
                assert item["msg"] in url
        except Exception as e:
            self.logger.error("*****断言名称为 %s 失败" % item["check_name"])
            print("*****断言名称为 %s 失败" % item["check_name"])
            raise e
